package com.tim.util;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;

import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

/**
 * 作者：Tim
 * 时间：2021/4/14 18:50
 */
public class BeanUtil {
    public static <T> T convertBean(Map<String, String[]> map, Class<T> c){
        try {
            T t = (T) c.newInstance();
            ConvertUtils.register(new Converter() {
                @Override
                //Class aClass 类对象（暂时用不上）  Object o（传入的值，就是前段传回来的那个字符串（2021-04-14））
                public Object convert(Class aClass, Object o) {

                    if(o instanceof String){  //判断o是不是String类型
                        String time = (String) o; //是的话进行强转
                        //将String类型的日期转成Date类型日期
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        try {
                            return sdf.parse(time);
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    }
                    return null;
                }
            }, Date.class);    //此处为将字符串转化的类型结果，javautil类
            //将map转换成对象
            BeanUtils.populate(t,map);
            return t; //不报错返回t 否则返回null
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        return null;
    }
}
